]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Only do redisplay when mapped
authorColin Walters <walters@verbum.org>
Sat, 24 Oct 2009 16:43:56 +0000 (12:43 -0400)
committerColin Walters <walters@verbum.org>
Wed, 28 Oct 2009 16:20:02 +0000 (12:20 -0400)
If we're not mapped, only queue up a redisplay.  This avoids
e.g. changes in recent documents such as saving a file in GEdit
causing a lot of blocking I/O in the shell (we need to make
recent loading async as well).

https://bugzilla.gnome.org/show_bug.cgi?id=599560

js/ui/genericDisplay.js

index 9dafd33195e0c9d09ff2a994780a0ffeb99c0891..4744669a2ec7e05ea741655a61317577b1e1c8fa 100644 (file)
@@ -314,7 +314,7 @@ GenericDisplayItem.prototype = {
         // For some reason, we are not getting leave-event signal when we are dragging an item,
         // so we should remove the link manually.
         this._informationButton.actor.hide();
-    } 
+    }
 };
 
 Signals.addSignalMethods(GenericDisplayItem.prototype);
@@ -342,6 +342,9 @@ GenericDisplay.prototype = {
             this._updateDisplayControl(false);
         }));
 
+        this._pendingRedisplay = RedisplayFlags.NONE;
+        this._list.connect('notify::mapped', Lang.bind(this, this._onMappedNotify));
+
         // map<itemId, Object> where Object represents the item info
         this._allItems = {};
         // set<itemId>
@@ -642,6 +645,11 @@ GenericDisplay.prototype = {
      *  FULL - Indicates that we need recreate all displayed items; implies RESET_CONTROLS as well
      */
     _redisplay: function(flags) {
+        if (!this._list.mapped) {
+            this._pendingRedisplay |= flags;
+            return;
+        }
+
         let isSubSearch = (flags & RedisplayFlags.SUBSEARCH) > 0;
         let fullReload = (flags & RedisplayFlags.FULL) > 0;
         let resetPage = (flags & RedisplayFlags.RESET_CONTROLS) > 0 || fullReload;
@@ -852,6 +860,14 @@ GenericDisplay.prototype = {
         let item = this._findDisplayedByIndex(index);
         item.markSelected(true);
         this.emit('selected');
+    },
+
+    _onMappedNotify: function () {
+        let mapped = this._list.mapped;
+        if (mapped && this._pendingRedisplay > RedisplayFlags.NONE)
+            this._redisplay(this._pendingRedisplay);
+
+        this._pendingRedisplay = RedisplayFlags.NONE;
     }
 };